1. Field of the Invention
The present invention relates generally to data recovery, and more particularly to a method and apparatus for using a flexible buffering scheme in an XOR engine to generate checksums in RAID systems, allowing a user to recover data when a disk drive partly or completely fails.
2. Description of the Related Art
An exclusive-OR (XOR) engine is a hardware engine which may be used to generate checksums for RAID (redundant array of independent disks) systems. These systems allow a user to recover data if a disk drive partly or completely fails. In such a system, XOR operations are performed on data from plural disk drives, generating a checksum. If one of the disk drives partly or completely fails, a user can XOR the checksum with the remaining original data, thus recreating the lost data. In a RAID system, data may be spread across multiple drives. One or more parity drives may be implemented in a RAID system so that if one of the drives containing data partly or completely fails, any lost data can be reconstructed using the data from the parity drive. Two mathematical mechanisms from which the parity can be generated are a simple XOR of the user data, generating what is known as a “P” checksum, and a Galois field (GF) Multiply and XOR of the user data, generating what is known as a “Q” checksum. In a version of RAID known as RAID 5, “P” checksums can be generated using XOR. In a version of RAID known as RAID 6, “Q” checksums can be generated using a combination of XOR and GF Multiply.
A common RAID 6 system uses a plurality of disk drives, and may have two spare drives. One spare drive contains a “P” checksum, and one spare drive contains a “Q” checksum. Up to two lost data drives can be recreated using the “P” and “Q” checksums. Known hardware implementations allow a user to generate a “P” checksum, a “Q” checksum, or both a single “P” and a single “Q” checksum.
One disadvantage of known XOR engines is that they provide only two local result buffers in the XOR engine, allowing a user to generate at best only one “P” checksum and one “Q” checksum with one read of the user data. Additional operations require additional reads of the user data, thus reducing performance efficiency. Generating different “Q” checksums requires using different GF Multiply coefficients. Another disadvantage of known XOR engines is that they provide only one GF Multiply coefficient for each data source. This same coefficient must be used for each GF Multiply operation, and so using different GF Multiply coefficients requires additional reads of the user data. Thus, the number of “Q” checksums generated per read of the user data is currently limited to one.
Another disadvantage of the conventional technology is that the maximum number of parity drives a user can have if using a “P” checksum is two. A further disadvantage of the conventional technology is that the memory in which the data is stored is typically not fast enough to keep up with the rest of the system. Thus, it is beneficial to minimize the number of reads and writes of the data to the main memory. Another disadvantage is that the user data can only be read from exactly one source and can only be written to exactly one location.
It would be desirable to provide an approach which is sufficiently flexible to accommodate changes over a sufficiently long period of time while particular chips or chipsets are in use for handling RAID storage.